<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		
		<script type="text/javascript" language="JavaScript">
			// number类型
			var a = 1;
			console.info(typeof(a)) // 查看变量a的值得类型
			a = 1.1;
			console.info(typeof(a)) // 查看变量a的值得类型
				
			// boolean
			a =  true;
			console.info(typeof(a)); 
		
			// string
			a = 'hello world'
			console.info(typeof(a))
		
			a = "hello world"
			console.info(typeof(a))
			
			// 可变字符串
			b = `hello world ${a}`
			console.info(typeof(b))
			console.info(b)
			
			// 对象类型
			b = new Date()
			console.info(b)
			console.info(typeof(b))
			
			b = {sname: 'tom', age: 10}
			console.info(typeof(b))
			console.info(`名字是${b.sname}, 年龄是${b.age}`)
			
			console.info(typeof(null)) // ??? object
			
			// 特殊的了 function类型  函数类型
			function abc() {
				// debugger  // 调试语法
				alert(1)
			}
			console.info(typeof(abc))
			
			// undefined 类型  意义定义变量未赋值
			var c
			console.info(c)
			console.info(typeof(c))
			
			abc()
			
			for (var i = 0; i < 10; i++) {
				
			}
			console.info(i) // i是几？？？
			
			var j = 10;
			function abc1() {
				console.info(j) // undifined
				var j = 11;
				console.info(j) // 11
			}
			abc1()
			
			// 闭包
			// 内部函数访问外部函数变量 
			function abc2() {
				var j = 100
				return function() {
					// 内部函数访问 外部函数的变量
					return j;
				}
			}
			var m = abc2()()
			console.info(m)
			
		</script>
	</head>
	<body>
		<button onclick="nn()">点</button>
		<ul id="ul1">
			
		</ul>
		<script>
			function nn() {
				var ele = document.getElementById("ul1");
				for (var i = 0; i < 10; i++) {
					var li = document.createElement("button")
					
					li.onclick = function() {
						var x = i
						return function(){alert(x)}
					}()
					li.innerHTML = i
					ele.appendChild(li)
				}
			}

			var a10 = [];  
			if (a10) {
				console.info("aaaa")
			} else {
				console.info("bbbb")
			}
			
			// 定义一个类
			function Person(name, age) {
				this.name = name
				this.age = age
				this.showage = function() {
					return age
				}
			}
			
			var stu = new Person('tom', 10)
	
			// 通过原型 给类附加属性
			Person.prototype.sex = "男"
			
			// 循环对象属性
			for (var pro in stu) {
				console.info(`属性：${pro},值：${stu[pro]}`)
			}
			
			console.info("======================")
			// 通过原型继承---
			function animal(){
				this.name = "动物"
			}
			function Cat() {
				this.age = 10
			}
			Cat.prototype = new animal();
			var c1 = new Cat();
			
			// 循环对象属性
			for (var pro in c1) {
				console.info(`属性：${pro},值：${c1[pro]}`)
			}
			console.info("======================")
			function dog() {
				animal.call(this) // 调用animal函数，修改animal中的this。
				this.age=10
			}
			var c1 = new dog();
			// 循环对象属性
			for (var pro in c1) {
				console.info(`属性：${pro},值：${c1[pro]}`)
			}
		</script>
	</body>
</html>
